﻿Public Class ModificarPuesto

    Dim codigoPuesto As Integer

    ''' <summary>
    ''' Crea la instancia.
    ''' </summary>
    ''' <param name="p_codigo">Codigo del puesto.</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/2010 </remarks>
    Public Sub New(ByVal p_codigo As Integer)
        InitializeComponent()
        codigoPuesto = p_codigo
        Dim objPuesto = Logica.Gestor.obtenerPuesto(codigoPuesto)
        txtDepartamento.Text = Logica.Gestor.obtenerNombreDepartamentoPorCodigoNivel(objPuesto("nivel"))
        txtNivel.Text = Logica.Gestor.obtenerNivelPorCodigoNivel(objPuesto("nivel"))
        llenarTipoSalario()
        cmbDepartamento.Visible = False
        cmbNivel.Visible = False
        cargarDatos()
    End Sub

    ''' <summary>
    ''' Llena los datos en los controles.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub cargarDatos()
        Dim objPuesto As Hashtable
        objPuesto = Logica.Gestor.obtenerPuesto(codigoPuesto)
        '
        txtNombre.Text = objPuesto("nombre")
        txtDescripcion.Text = objPuesto("descripcion")
        txtSalario.Text = objPuesto("salario")
        ''
    End Sub

    ''' <summary>
    ''' Llena el combobox con los tipos de salario.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub llenarTipoSalario()
        cmbSalario.DataSource = New BindingSource(Logica.Gestor.obtenerTiposSalario, Nothing)
        cmbSalario.DisplayMember = "Key"
        cmbSalario.ValueMember = "Value"
        ''
    End Sub

    ''' <summary>
    ''' Llena los combobox con los depts.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub llenarDepartamentos()
        '
        Dim listaDepartamento As List(Of Hashtable)
        listaDepartamento = Logica.Gestor.listarDepartamentos
        Dim opciones = New Dictionary(Of String, String)()
        For i As Integer = 0 To listaDepartamento.Count - 1
            opciones(CType(listaDepartamento.Item(i), Hashtable)("codigo")) = CType(listaDepartamento.Item(i), Hashtable)("nombre")
        Next
        '
        cmbDepartamento.DataSource = New BindingSource(opciones, Nothing)
        cmbDepartamento.DisplayMember = "Value"
        cmbDepartamento.ValueMember = "Key"
    End Sub

    ''' <summary>
    ''' Llena los combobox con los niveles.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub llenarNiveles()
        If cmbDepartamento.SelectedValue = "null" Then
            cmbNivel.Text = ""
            cmbNivel.Enabled = False
            Return
        End If
        Dim lista As List(Of Hashtable)
        Dim dept = cmbDepartamento.SelectedValue
        lista = Logica.Gestor.listarNivelesPorDepartamento(dept)
        '
        If lista.Count = 0 Then
            cmbNivel.Text = ""
            cmbNivel.Enabled = False
            Return
        End If
        Dim opciones = New Dictionary(Of String, String)()
        For i As Integer = 0 To lista.Count - 1
            opciones(CType(lista.Item(i), Hashtable)("nivel")) = CType(lista.Item(i), Hashtable)("codigo")
        Next
        '
        cmbNivel.DataSource = New BindingSource(opciones, Nothing)
        cmbNivel.DisplayMember = "Key"
        cmbNivel.ValueMember = "Value"
    End Sub

    ''' <summary>
    ''' Evento cuando el combobox de depts es abierto y cerrado.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub cmbDepartamento_DropDownClosed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbDepartamento.DropDownClosed
        cmbNivel.Enabled = True
        llenarNiveles()
    End Sub

    ''' <summary>
    ''' Event cuando el combobox de salario es abierto y cerrado
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub cmbSalario_DropDownClosed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbSalario.DropDownClosed
        txtSalario.Enabled = True
        If cmbSalario.SelectedValue = 1 Then
            lblSalario.Text = "Salario"
        End If
        If cmbSalario.SelectedValue = 2 Then
            lblSalario.Text = "Base"
        End If
        If cmbSalario.SelectedValue = 3 Then
            txtSalario.Enabled = False
            txtSalario.Text = ""
            lblSalario.Text = "N/A"
        End If
    End Sub

    ''' <summary>
    ''' Muestra la retroalimentacion de exito
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub alertarExito()
        MsgBox("El puesto se modificó con éxito", MsgBoxStyle.Information, "Exito")
        Me.Close()
    End Sub

    ''' <summary>
    ''' Muestra la retroalimentacion de error.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub alertarError()
        lblMsj.Text = "Ocurrió un error"
        lblMsj.ForeColor = Color.Red
        lblMsj.Visible = True
    End Sub

    ''' <summary>
    ''' Muestra la retroalimentacion de campos vacios.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub alertarVacio()
        lblMsj.Text = "Debe llenar todos los campos"
        lblMsj.ForeColor = Color.Red
        lblMsj.Visible = True
    End Sub

    ''' <summary>
    ''' Se encarga de las validaciones del formulario.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Function validar() As Boolean
        If Not validarVacio() Then
            alertarVacio()
            Return False
        End If
        Return True
    End Function

    ''' <summary>
    ''' Revisa que todos los campos necesarios esten llenos.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Function validarVacio() As Boolean
        If txtNombre.Text = "" Then
            Return False
        End If
        If Not cmbSalario.SelectedValue = 3 Then
            If txtSalario.Text = "" Then
                Return False
            End If
        End If
        If txtDescripcion.Text = "" Then
            Return False
        End If
        Return True
    End Function

    ''' <summary>
    ''' Evento que se dispara cuando el boton OK es clickeado.
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
        If cmbSalario.SelectedValue = 3 Then
            txtSalario.Text = "0"
        End If
        lblMsj.Visible = False
        If Not validar() Then
            Return
        End If

        If chbCambiar.Checked = True And cmbNivel.Enabled = True Then
            Try
                Logica.Gestor.actualizarPuesto(codigoPuesto, txtNombre.Text, txtDescripcion.Text, cmbNivel.SelectedValue, cmbSalario.SelectedValue, txtSalario.Text)
                Me.Close()
                'alertarExito()
            Catch ex As Exception
                MsgBox("modificar puesto -> btn click: " + ex.Message)
                alertarError()
            End Try
        Else
            Dim ht As Hashtable
            ht = Logica.Gestor.obtenerPuesto(codigoPuesto)
            Try
                Logica.Gestor.actualizarPuesto(codigoPuesto, txtNombre.Text, txtDescripcion.Text, ht("nivel"), cmbSalario.SelectedValue, txtSalario.Text)
                Me.Close()
                'alertarExito()
            Catch ex As Exception
                MsgBox("modificar puesto -> btn click: " + ex.Message)
                alertarError()
            End Try
        End If
        alertarExito()
    End Sub

    ''' <summary>
    ''' Evento que se dispara cuando el checkbox en el formulario es activado o desactivado
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Sub chbCambiar_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chbCambiar.CheckedChanged
        If chbCambiar.Checked = True Then
            cmbDepartamento.Visible = True
            cmbNivel.Visible = True
            txtDepartamento.Visible = False
            txtNivel.Visible = False
            llenarDepartamentos()
            llenarNiveles()
        End If
        If chbCambiar.Checked = False Then
            cmbDepartamento.Visible = False
            cmbNivel.Visible = False
            txtDepartamento.Visible = True
            txtNivel.Visible = True
        End If
    End Sub

    ''' <summary>
    ''' evita que se inserte texto
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtSalario_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSalario.KeyPress
        If e.KeyChar = "." Then
            If txtSalario.Text.IndexOf(".") > -1 Then
                e.Handled = True
            End If
        ElseIf Char.IsNumber(e.KeyChar) = False AndAlso Char.IsControl(e.KeyChar) = False Then
            e.Handled = True
        End If
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Close()
    End Sub

    Private Sub ModificarPuesto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class